In cryptography, a sponge function or sponge construction is any of a class of with finite internal state that take an input bit stream of any length and produce an output bit stream of any desired length. Sponge functions have both theoretical and practical uses. They can be used to model or implement many cryptographic primitives, including cryptographic hashes, message authentication codes, mask generation functions, , pseudo-random number generators, and authenticated encryption.
S is divided into two sections: one of size r (the bitrate) and the remaining part of size c (the capacity). These sections are denoted R and C respectively.
f produces a pseudorandom permutation of the states from S.
P appends enough bits to the input string so that the length of the padded input is a whole multiple of the bitrate, r. This means the input is segmented into blocks of r bits.
The sponge function output is now ready to be produced ("squeezed out") as follows:
If less than r bits remain to be output, then R will be truncated (only part of R will be output).
Another metaphor describes the state memory as an "entropy pool", with input "poured into" the pool, and the transformation function referred to as "stirring the entropy pool".
Note that input bits are never XORed into the C portion of the state memory, nor are any bits of C ever output directly. The extent to which C is altered by the input depends entirely on the transformation function f. In hash applications, resistance to Collision attack or depends on C, and its size (the "capacity" c) is typically twice the desired resistance level.
The sponge construction can also be used to build practical cryptographic primitives. For example, the Keccak cryptographic sponge with a 1600-bit state has been selected by NIST as the winner in the SHA-3 competition. The strength of Keccak derives from the intricate, multi-round permutation f that its authors developed. The RC4-redesign called Spritz refers to the sponge-construct to define the algorithm.
For other examples, a sponge function can be used to build authenticated encryption with associated data (AEAD), as well as password hashing schemes.
|
|